/**
 * 将多个函数组合成一个从左到右依次执行的管道函数
 *
 * @param {...Function} funcs 要组合的函数列表，每个函数接收一个参数并返回一个值
 * @param {any} funcs.arg 每个函数的输入参数
 * @returns {Function} 组合后的新函数，该函数接收初始值并返回最终处理结果
 * @returns {any} 返回值的类型由最后一个函数的返回值决定
 * @example
 * const add1 = x => x + 1;
 * const double = x => x * 2;
 * const addThenDouble = pipe(add1, double);
 * addThenDouble(5); // 返回 12
 */
export function pipe(...funcs) {
  return (x) => funcs.reduce((v, f) => f(v), x);
}
